package com.bzkj.basicinfo.mapper;

import com.bzkj.basicinfo.domain.warehouse.PdaBillsList;
import com.bzkj.basicinfo.domain.warehouse.PdaWarehouseBillsDetail;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 单据主表Mapper接口
 * 
 * @author lixinyu
 * @date 2025-06-13
 */
public interface PdaBillsListMapper 
{
    /**
     * 查询单据主表
     * 
     * @param BillsID 单据主表主键
     * @return 单据主表
     */
    public PdaBillsList selectPdaBillsListByBillsID(String BillsID);


    /**
     * 查询单据明细列表（以批次号和药品名称为主）
     *
     * @param pdaBillsList 单据主表
     * @return 单据明细集合
     */
    public List<PdaBillsList> selectPdaBillsDetailList(PdaBillsList pdaBillsList);

    /**
     * 新增单据主表
     * 
     * @param pdaBillsList 单据主表
     * @return 结果
     */
    public int insertPdaBillsList(PdaBillsList pdaBillsList);

    /**
     * 修改单据主表
     * 
     * @param pdaBillsList 单据主表
     * @return 结果
     */
    public int updatePdaBillsList(PdaBillsList pdaBillsList);

    /**
     * 删除单据主表
     * 
     * @param BillsID 单据主表主键
     * @return 结果
     */
    public int deletePdaBillsListByBillsID(String BillsID);

    /**
     * 批量删除单据主表
     * 
     * @param BillsIDs 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePdaBillsListByBillsIDs(String[] BillsIDs);

    /**
     * 批量删除单据明细
     * 
     * @param BillsIDs 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePdaWarehouseBillsDetailByBillsIDs(String[] BillsIDs);
    
    /**
     * 批量新增单据明细
     * 
     * @param pdaWarehouseBillsDetailList 单据明细列表
     * @return 结果
     */
    public int batchPdaWarehouseBillsDetail(List<PdaWarehouseBillsDetail> pdaWarehouseBillsDetailList);
    

    /**
     * 通过单据主表主键删除单据明细信息
     *
     * @param BillsID 单据主表ID
     * @return 结果
     */
    public int deletePdaWarehouseBillsDetailByBillsID(String BillsID);

    /**
     * 更新单据上传状态
     *
     * @param billsID 单据号
     * @param uploadState 上传状态
     * @return 结果
     */
    public int updateUploadState(@Param("billsID") String billsID, @Param("uploadState") String uploadState);

    /**
     * 软删除单据主表（将状态改为3）
     *
     * @param billsIDs 需要删除的单据主表主键集合
     * @return 结果
     */
    public int softDeletePdaBillsList(String[] billsIDs);

    /**
     * 统计单据总数量
     *
     * @return 单据总数量
     */
    public int countTotalBills();

    /**
     * 按上传状态统计单据数量
     *
     * @param uploadState 上传状态
     * @return 单据数量
     */
    public int countBillsByUploadState(String uploadState);

    /**
     * 按单据类型统计数量
     *
     * @return 单据类型统计列表
     */
    public List<Map<String, Object>> countBillsByType();


    /**
     * 查询单据明细列表（用于批次号维护）
     *
     * @param billsID 单据号
     * @return 明细列表
     */
    public List<PdaWarehouseBillsDetail> selectPdaWarehouseBillsDetailByBillsID(String billsID);

    /**
     * 更新单据明细批次号
     *
     * @param pdaWarehouseBillsDetail 明细对象
     * @return 更新结果
     */
    public int updatePdaWarehouseBillsDetail(PdaWarehouseBillsDetail pdaWarehouseBillsDetail);
}
